No. 009 (2024.11.07)
(Markdown 記法ではないので注意 → 記法 を参照すること) 前回
参加者
mrkn
abap34 yuchi yamaguchi.icon
(ここに参加した人が自分の名前 / ID を追記していく)
前回からの置き手紙
abstract_call_method_with_const_argsから呼ばれているconcrete_eval_callから読み始める
メモ
concrete_eval_call (abstractinterpretation.jlのL947)
Core._call_in_world_total (実態は jl_f_call_in_world_total) で関数を実際に呼び出している → 定数の畳み込みをするため
eligibility が :concrete_eval のときに concrete_eval_call が呼ばれるので、この場合は関数 f が副作用を持たないことがわかっている
定数引数で、定数畳み込みが可能な場合にかぎり :concrete_eval になるから、関数を呼び出しても大丈夫 (is_foldable: effects.jl の L302 を参照)
EFFECTS_TOTAL の定義を確認した
nortcall の説明を読んで、なぜ Core.Compiler.return_type を呼ぶことを気にしているのかが分からない
return_type を読むと、jl_call_in_typeinf_world を読んでいて、その中で _return_type を jl_apply している
よく分からない
foo() = [foo() for _ in 1:0]
TODO: 門脇さんに詳しく聞く
count_const_size と sizeof, summarysize とかって何が違うんでしょう
count_const_size は compile time にやらないといけないので実際 summarysize
abstract_call_method_with_const_args に戻って続きを読む
定数を埋め込めない (関数をインライン展開できない) 場合は const_prop_call を呼ぶ
const_prop_call の前に eligibility === :semi_concrete_eval の場合を読む → 次回
次回
eligibility === :semi_concrete_eval の場合を読むところから再開
TODO: 門脇さんに聞く
nortcall が必要な理由の詳細
sizeof と count_const_size と summarysize の違い
その他
再来週 11/21 は abap34 さんテストのためスキップ
その翌週から再開